//Se realiza la importacion de las librerias de java que usaremos en nuestra aplicacion

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JComponent;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;


/********************************************************************************/
/***********************|************AUTORES************|************************/
/***********************|Marina Auxiliadora Toruño Pérez|************************/
/***********************|Melvin Rafael Vega Vega        |************************/
/********************************************************************************/

//Definicion de la clase principal
public class algoritmo extends JFrame{
	int x;
        JTabbedPane jtp;
        //JTextArea jta;
        JTextArea jerrora;
        editorcodigo jta;
        JLabel jl[]=new JLabel[50];
        JMenuItem jmi[][]=new JMenuItem[10][10];
        String cadenas[]=new String[50];
        File file[]=new File[50];
        JPanel jp=new JPanel();
        JButton jb=new JButton("X");
	public algoritmo() {
        jtp=new JTabbedPane();
        //jtp.setOrientation(JTabbedPane.BOTTOM);
        jtp.setVisible(false);
        jtp.setTabLayoutPolicy(jtp.SCROLL_TAB_LAYOUT);
        getContentPane().setLayout(null);
        int ancho = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
        int alto = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
        setBounds(0, 0, ancho, alto);
        x=-1;
        jta=new editorcodigo();
        JPanel jp2=new JPanel();
        jb.setMargin(new Insets(0, 2, 0, 1));
        jp.add(Box.createHorizontalStrut(6));
        jp.add(jb);
        WindowListener l = new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
        };
        //Parser x;
        addWindowListener(l);
        JMenuBar jmb=new JMenuBar();
        ImageIcon icon = new ImageIcon("agregar.gif");
        JMenu jm[]=new JMenu[10];
        jm[0]=new JMenu("Archivo");
        jmi[0][5]=new JMenuItem("Cerrar");
        jmi[0][6]=new JMenuItem("Salir");
        jmi[0][4]=new JMenuItem("Imprimir");
        jmi[0][3]=new JMenuItem("Nuevo");
        jmi[0][3].setIcon(icon);
        jmi[0][0]=new JMenuItem("Abrir");
        jmi[0][1]=new JMenuItem("Guardar");
        jmi[0][2]=new JMenuItem("Guardar como");
        jmi[0][1].setEnabled(false);
        
        jm[1]=new JMenu("Editar");
        jmi[1][0]=new JMenuItem("Deshacer");
        jmi[1][1]=new JMenuItem("Rehacer");
        jmi[1][2]=new JMenuItem("Copiar");
        jmi[1][3]=new JMenuItem("Cortar");
        jmi[1][4]=new JMenuItem("Pegar");
        jmi[1][5]=new JMenuItem("Seleccionar Todo");
     
        jm[2]=new JMenu("Buscar");
        jmi[2][0]=new JMenuItem("Buscar");
        jmi[2][1]=new JMenuItem("Buscar Siguiente");
        jmi[2][3]=new JMenuItem("Buscar Anterior");
        jmi[2][4]=new JMenuItem("Reemplazar");

        jm[3]=new JMenu("Herramientas");
        jmi[3][0]=new JMenuItem("Compilar");
        jmi[3][1]=new JMenuItem("Ejecutar");
        jmi[3][3]=new JMenuItem("Construir aplicacion");
        jmi[3][4]=new JMenuItem("Exportar codigo Java");
         
        
        jmi[0][6].addActionListener(
         new ActionListener(){
          public void actionPerformed(ActionEvent e)
           {
            System.exit(0);
           }
         }
        );
        jmi[0][0].addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent e)
           {
            JFileChooser fileChooser = new JFileChooser();
            int seleccion = fileChooser.showOpenDialog(jta);
            File fichero=null;
            if (seleccion == JFileChooser.APPROVE_OPTION)
            {
             fichero = fileChooser.getSelectedFile();
            }
            else
            {
             return;
            }
            BufferedReader input;
            String line="";
            String cadena="";
            try {
            //System.out.print(fichero.getPath());
            x++;
            jl[x]=new JLabel(fichero.getName());
            if(jtp.isVisible()==false)
            {
             jtp.setVisible(true);
            }
            jtp.addTab(fichero.getName(),jp);
            jtp.setComponentAt(jtp.getSelectedIndex(), jb);
            jtp.setSelectedIndex(jtp.getTabCount()-1);
            jtp.addChangeListener(new ChangeListener() {
		public void stateChanged(ChangeEvent evento2) {
		jta.setText(cadenas[jtp.getSelectedIndex()]);
	    }
            }
            );
            input = new BufferedReader(new FileReader(fichero.getPath()));
            while ((line=input.readLine()) != null)
            {
                cadena =cadena+"\n "+line;
            }

            input.close();
            }
            catch(IOException err) {
            //whatever you want it to do when you get an error
            }
            cadenas[jtp.getSelectedIndex()]=new String(cadena);
            file[jtp.getSelectedIndex()]=fichero;
            jta.setText(cadena);
            jta.setEnabled(true);
            jmi[0][1].setEnabled(true);
           }
        });
         jmi[0][1].addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent evt5)
           {
               try{
                 cadenas[jtp.getSelectedIndex()]=jta.getText();
                 Writer out = new BufferedWriter(new FileWriter(file[jtp.getSelectedIndex()]));
                 out.write(cadenas[jtp.getSelectedIndex()]);
                 out.close();

               }
               catch(IOException ex)
               {
                   
               }
           }
         });
         jmi[0][2].addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent evt6)
           {
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setSelectedFile(new File("Nuevo Archivo"));
            int seleccion = fileChooser.showSaveDialog(jta);
            File fichero=null;
            if (seleccion == JFileChooser.APPROVE_OPTION)
            {
             fichero = fileChooser.getSelectedFile();
            }
            cadenas[jtp.getSelectedIndex()]=jta.getText();
               try{
                 file[jtp.getSelectedIndex()]=fichero;
                 jtp.setTitleAt(jtp.getSelectedIndex(), fichero.getName());
                 if(jtp.isVisible()==false)
                 {
                  jtp.setVisible(true);
                 }
                 cadenas[jtp.getSelectedIndex()]=jta.getText();
                 Writer out = new BufferedWriter(new FileWriter(file[jtp.getSelectedIndex()]));
                 out.write(cadenas[jtp.getSelectedIndex()]);
                 out.close();

               }
               catch(IOException ex)
               {
                   
               }
           }
         });
         jmi[0][3].addActionListener(new ActionListener(){
           public void actionPerformed(ActionEvent evt7)
           {
            x++;
            jl[x]=new JLabel("New File "+jtp.getTabCount());
            if(jtp.isVisible()==false)
            {
             jtp.setVisible(true);
            }
            jtp.add("New File "+jtp.getTabCount(),jl[x]);
            jtp.setSelectedIndex(jtp.getTabCount()-1);
            cadenas[jtp.getSelectedIndex()]="";
            jta.setEnabled(true);
           }
         });


        jmi[3][0].addActionListener(
         new ActionListener(){
          public void actionPerformed(ActionEvent e)
           {
            programa p=new programa(file[jtp.getSelectedIndex()].getPath());
            //System.out.println(p.obtenerLineas());
            p.construir();
            jerrora.setText(p.getError()); 
           }
         }
        );

        for(int m=0;m<jm.length;m++){
         if(jm[m]!=null){
          for(int x=0;x<jmi[m].length;x++){
           if(jmi[m][x]!=null){
            jm[m].add(jmi[m][x]);
           }
          }
          jmb.add(jm[m]);
         }
        }
        /*for(int x=0;x<=6;x++){
         jm[0].add(jmi[x][0]);
        }
        for(int x=0;x<=5;x++){
         jm[1].add(jmi[x][1]);
        }*/

        //jmb.add(jm[0]);
        //jmb.add(jm[1]);
        jmb.setAlignmentX(10);
        jmb.setBounds(0, 0, ancho, 20);
        //jmb.setSize(this.getSize());
        jtp.setBounds(0,25 , ancho, 20);
        jtp.setAlignmentX(JTabbedPane.LEFT_ALIGNMENT);
        jta.setBounds(20, 50, ancho-150,alto-300);
        JScrollPane scroll = new JScrollPane(jta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroll.setBounds(20, 50, ancho-150, alto-300);
        JScrollBar scrollBar = new JScrollBar();
        scroll.setCorner(JScrollPane.LOWER_RIGHT_CORNER, scrollBar);
        getContentPane().add(scroll);
        getContentPane().add(jmb);
        getContentPane().add(jtp);

        jerrora=new JTextArea();
        jerrora.setEditable(false);
        JScrollPane jscrolla=new JScrollPane(jerrora, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        JScrollBar jscrollBara = new JScrollBar();
        jscrolla.setCorner(JScrollPane.LOWER_RIGHT_CORNER, jscrollBara);
        jscrolla.setBounds(20, alto-250, ancho-150, alto-100); 
        getContentPane().add(jscrolla);

        setVisible(true);
        jta.setEnabled(false);
	}
    public static void main(String args[]) {
            JFrame.setDefaultLookAndFeelDecorated(true);
            JDialog.setDefaultLookAndFeelDecorated(true);
            algoritmo frm=new algoritmo();
    }

}  
